package org.jsola.hr.service;

import javax.validation.constraints.NotNull;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IEmpWorkDAO;
import org.jsola.hr.dto.EmpWorkAddDTO;
import org.jsola.hr.dto.EmpWorkDTO;
import org.jsola.hr.dto.EmpWorkUpdateDTO;
import org.jsola.hr.entity.EmpWorkDO;
import org.jsola.hr.query.EmpWorkQuery;
import org.jsola.hr.vo.EmpWorkListVO;
import org.jsola.hr.vo.EmpWorkVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * @author zhr
 */
public interface IEmpWorkService extends IService<IEmpWorkDAO, EmpWorkDO> {

    /**
     * 新增员工工作经历
     * @param empWorkAddDTO 新增员工工作经历DTO
     * @param tokenUser 当前用户
     * @return 员工工作经历详情信息
     */
    EmpWorkVO save(EmpWorkAddDTO empWorkAddDTO, TokenUser tokenUser);

    /**
     * 修改员工工作经历
     * @param empWorkUpdateDTO 修改员工工作经历DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(EmpWorkUpdateDTO empWorkUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除员工工作经历，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param empWorkIds 员工工作经历id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...empWorkIds);

    /**
     * 根据员工工作经历id查找
     * @param empWorkId 员工工作经历id
     * @param siteId 所属站点id
     * @return 员工工作经历详情信息
     */
    EmpWorkVO selectById(String empWorkId, String siteId);

    /**
     * 查询员工工作经历
     * @param empWorkQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工工作经历列表信息
     */
    List<EmpWorkListVO> select(EmpWorkQuery empWorkQuery, String siteId);

    /**
    * 查询员工工作经历记录数
    * @param empWorkQuery 查询条件
    * @param siteId 所属站点id
    * @return 员工工作经历记录数
    */
    int selectCount(EmpWorkQuery empWorkQuery, String siteId);

    /**
     * 分页查询员工工作经历
     * @param empWorkQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工工作经历列表信息
     */
    Page<EmpWorkListVO> selectPage(EmpWorkQuery empWorkQuery, String siteId);


    /**
     * 根据员工工作经历id查找
     * @param empWorkId 员工工作经历id
     * @param siteId 所属站点id
     * @return 员工工作经历
     */
    EmpWorkDO selectDOById(String empWorkId, String siteId);

    /**
     * 查询员工工作经历
     * @param empWorkQuery 查询条件
     * @param siteId 所属站点id
     * @return 员工工作经历列表
     */
    List<EmpWorkDO> selectDO(EmpWorkQuery empWorkQuery, String siteId);

    /**
     * 删除员工工作经历
     * @param tokenUser 当前用户
     * @param empWorkId 员工工作经历id
     * @return 删除数量
     */
    Integer deleteEmpWork(TokenUser tokenUser, String empWorkId);

    /**
     * 根据公司id删除部门
     *
     * @param companyId 公司id
     * @param tokenUser 当前用户
     */
    void deleteByCompanyId(@NotNull String companyId, TokenUser tokenUser);


    /**
     * 发布工作经历
     *
     * @param empWorkList 工作经历
     * @param companyId   公司id
     * @param empId       人员id
     * @param tokenUser   当前用户
     */
    void publishEmpWorkList(List<EmpWorkDTO> empWorkList, String companyId, String empId, TokenUser tokenUser);

    /**
     * 查找某员工的所有工作经历
     *
     * @param empId  员工id
     * @param siteId 站点
     * @return 员工的所有工作经历
     */
    List<EmpWorkDO> listByEmpId(String empId, String siteId);
}


